package com.binance.mbxgateway.api;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import com.binance.master.configs.FeignConfig;
import com.binance.master.constant.Constant;
import com.binance.master.models.APIRequest;
import com.binance.master.models.APIRequest.VoidBody;
import com.binance.master.models.APIResponse;
import com.binance.mbxgateway.vo.request.matchbox.DeleteApiKeyLockRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteApiKeyRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteApiKeyRuleRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteGasOptOutRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteIcebergPartsFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteLotSizeFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteMarketLotSizeFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteMinNotionalFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteNumAlgoOrdersFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteNumIcebergOrdersRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteNumOrdersFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteOpenOrdersRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteOrderRateLimitAccountRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteOrderRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeletePercentPriceFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeletePositionFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeletePriceFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteTPlusSellFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.DeleteUserDataStreamRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetAccountByExternalIdRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetAccountRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetAccountSymbolCommissionHistoryRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetAccountSymbolsCommissionRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetAccountTPlusLockStateRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetAllOrdersRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetApiKeyCheckRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetApiKeyLockRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetApiKeysRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetAssetBalanceRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetAssetLedgerRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetAuctionReportsRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetBalanceLedgerRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetCommissionRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetEstimateSymbolRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetFiltersRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetOpenOrdersRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetOrderRateLimitRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetOrderRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetSymbolCommissionHistoryRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetSymbolCommissionRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetSymbolHistoryRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetSymbolOrdersRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetTradesRequest;
import com.binance.mbxgateway.vo.request.matchbox.GetUserTradesRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostAccountRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostApiKeyRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostApiKeyRuleRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostAssetRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostBalanceRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostIcebergPartsFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostLotSizeFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostMarketLotSizeFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostMinNotionalFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostNumAlgoOrdersFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostNumIcebergOrdersRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostNumOrdersFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostOrderRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostPercentPriceFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostPositionFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostPriceFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostSymbolRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostTPlusSellFilterRequest;
import com.binance.mbxgateway.vo.request.matchbox.PostUserDataStreamRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutAccountAssetRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutAccountCommissionRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutAccountRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutAccountSymbolsCommissionRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutAllSymbolsRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutApiKeyLockRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutApiKeyPermissionsRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutExchangeGasRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutExchangeRateRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutGasOptOutRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutOrderRateLimitAccountRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutOrderRateLimitRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutOrderTypesRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutSymbolCommissionRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutSymbolCommissionTypeRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutSymbolRequest;
import com.binance.mbxgateway.vo.request.matchbox.PutUserDataStreamRequest;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

@Api(value = "matchbox的v1的mgmt接口，没有操作数据库等业务逻辑，仅仅是转发调用matchbox")
@FeignClient(name = Constant.MBX_GATEWAY_SERVICE, configuration = FeignConfig.class)
public interface IMatchboxApi {

    @ApiOperation("putAccountCommission")
    @PostMapping(value = "/putAccountCommission", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putAccountCommission(@RequestBody APIRequest<PutAccountCommissionRequest> request)
            throws Exception;

    @ApiOperation("getTime")
    @PostMapping(value = "/getTime", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getTime(@RequestBody APIRequest<VoidBody> request) throws Exception;

    @ApiOperation("getSymbolOrders")
    @PostMapping(value = "/getSymbolOrders", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getSymbolOrders(@RequestBody APIRequest<GetSymbolOrdersRequest> request)
            throws Exception;

    @ApiOperation("postBalance")
    @PostMapping(value = "/postBalance", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postBalance(@RequestBody APIRequest<PostBalanceRequest> request) throws Exception;

    @ApiOperation("deleteOrder")
    @PostMapping(value = "/deleteOrder", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteOrder(@RequestBody APIRequest<DeleteOrderRequest> request) throws Exception;

    @ApiOperation("deleteOpenOrders")
    @PostMapping(value = "/deleteOpenOrders", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteOpenOrders(@RequestBody APIRequest<DeleteOpenOrdersRequest> request)
            throws Exception;

    @ApiOperation("getAllOrders")
    @PostMapping(value = "/getAllOrders", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAllOrders(@RequestBody APIRequest<GetAllOrdersRequest> request) throws Exception;

    @ApiOperation("postOrder")
    @PostMapping(value = "/postOrder", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postOrder(@RequestBody APIRequest<PostOrderRequest> request) throws Exception;

    @ApiOperation("getBalanceLedger")
    @PostMapping(value = "/getBalanceLedger", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getBalanceLedger(@RequestBody APIRequest<GetBalanceLedgerRequest> request)
            throws Exception;

    @ApiOperation("getAllAccounts")
    @PostMapping(value = "/getAllAccounts", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAllAccounts(@RequestBody APIRequest<VoidBody> request) throws Exception;

    @ApiOperation("putAccountAsset")
    @PostMapping(value = "/putAccountAsset", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putAccountAsset(@RequestBody APIRequest<PutAccountAssetRequest> request) throws Exception;

    @ApiOperation("postAccount")
    @PostMapping(value = "/postAccount", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postAccount(@RequestBody APIRequest<PostAccountRequest> request) throws Exception;

    @ApiOperation("getOpenOrders")
    @PostMapping(value = "/getOpenOrders", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getOpenOrders(@RequestBody APIRequest<GetOpenOrdersRequest> request) throws Exception;

    @ApiOperation("putAccount")
    @PostMapping(value = "/putAccount", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putAccount(@RequestBody APIRequest<PutAccountRequest> request) throws Exception;

    @ApiOperation("getOrder")
    @PostMapping(value = "/getOrder", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getOrder(@RequestBody APIRequest<GetOrderRequest> request) throws Exception;

    @ApiOperation("getAccount")
    @PostMapping(value = "/getAccount", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAccount(@RequestBody APIRequest<GetAccountRequest> request) throws Exception;

    @ApiOperation("putGasOptOut")
    @PostMapping(value = "/putGasOptOut", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putGasOptOut(@RequestBody APIRequest<PutGasOptOutRequest> request) throws Exception;

    @ApiOperation("deleteGasOptOut")
    @PostMapping(value = "/deleteGasOptOut", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteGasOptOut(@RequestBody APIRequest<DeleteGasOptOutRequest> request) throws Exception;

    @ApiOperation(value = "postApiKey，创建Api")
    @PostMapping(value = "/postApiKey", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postApiKey(@RequestBody APIRequest<PostApiKeyRequest> request) throws Exception;

    @ApiOperation("getApiKeys")
    @PostMapping(value = "/getApiKeys", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getApiKeys(@RequestBody APIRequest<GetApiKeysRequest> request) throws Exception;

    @ApiOperation("putApiKeyLock")
    @PostMapping(value = "/putApiKeyLock", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putApiKeyLock(@RequestBody APIRequest<PutApiKeyLockRequest> request) throws Exception;

    @ApiOperation("postPriceFilter")
    @PostMapping(value = "/postPriceFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postPriceFilter(@RequestBody APIRequest<PostPriceFilterRequest> request)
            throws Exception;

    @ApiOperation("postAsset")
    @PostMapping(value = "/postAsset", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postAsset(@RequestBody APIRequest<PostAssetRequest> request) throws Exception;

    @ApiOperation("getApiKeyLock")
    @PostMapping(value = "/getApiKeyLock", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getApiKeyLock(@RequestBody APIRequest<GetApiKeyLockRequest> request) throws Exception;

    @ApiOperation("getAssetBalance")
    @PostMapping(value = "/getAssetBalance", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAssetBalance(@RequestBody APIRequest<GetAssetBalanceRequest> request)
            throws Exception;

    @ApiOperation("getAssetLedger")
    @PostMapping(value = "/getAssetLedger", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAssetLedger(@RequestBody APIRequest<GetAssetLedgerRequest> request) throws Exception;

    @ApiOperation("putAllSymbols")
    @PostMapping(value = "/putAllSymbols", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putAllSymbols(@RequestBody APIRequest<PutAllSymbolsRequest> request) throws Exception;

    @ApiOperation("postSymbol")
    @PostMapping(value = "/postSymbol", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postSymbol(@RequestBody APIRequest<PostSymbolRequest> request) throws Exception;

    @ApiOperation("postApiKeyRule")
    @PostMapping(value = "/postApiKeyRule", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postApiKeyRule(@RequestBody APIRequest<PostApiKeyRuleRequest> request) throws Exception;

    @ApiOperation("deleteApiKeyLock")
    @PostMapping(value = "/deleteApiKeyLock", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteApiKeyLock(@RequestBody APIRequest<DeleteApiKeyLockRequest> request)
            throws Exception;

    @ApiOperation("getSymbols")
    @PostMapping(value = "/getSymbols", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getSymbols(@RequestBody APIRequest<VoidBody> request) throws Exception;

    @ApiOperation("getApiKeyCheck")
    @PostMapping(value = "/getApiKeyCheck", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getApiKeyCheck(@RequestBody APIRequest<GetApiKeyCheckRequest> request) throws Exception;

    @ApiOperation("getFilters")
    @PostMapping(value = "/getFilters", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getFilters(@RequestBody APIRequest<GetFiltersRequest> request) throws Exception;

    @ApiOperation("deleteApiKeyRule")
    @PostMapping(value = "/deleteApiKeyRule", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteApiKeyRule(@RequestBody APIRequest<DeleteApiKeyRuleRequest> request)
            throws Exception;

    @ApiOperation("getSymbolHistory")
    @PostMapping(value = "/getSymbolHistory", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getSymbolHistory(@RequestBody APIRequest<GetSymbolHistoryRequest> request)
            throws Exception;

    @ApiOperation("putExchangeRate")
    @PostMapping(value = "/putExchangeRate", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putExchangeRate(@RequestBody APIRequest<PutExchangeRateRequest> request) throws Exception;

    @ApiOperation("getCommission")
    @PostMapping(value = "/getCommission", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getCommission(@RequestBody APIRequest<GetCommissionRequest> request) throws Exception;

    @ApiOperation("getUserTrades")
    @PostMapping(value = "/getUserTrades", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getUserTrades(@RequestBody APIRequest<GetUserTradesRequest> request) throws Exception;

    @ApiOperation("putOrderTypes")
    @PostMapping(value = "/putOrderTypes", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putOrderTypes(@RequestBody APIRequest<PutOrderTypesRequest> request) throws Exception;

    @ApiOperation("getAssets")
    @PostMapping(value = "/getAssets", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAssets(@RequestBody APIRequest<VoidBody> request) throws Exception;

    @ApiOperation("deleteApiKey")
    @PostMapping(value = "/deleteApiKey", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteApiKey(@RequestBody APIRequest<DeleteApiKeyRequest> request) throws Exception;

    @ApiOperation("putSymbol")
    @PostMapping(value = "/putSymbol", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putSymbol(@RequestBody APIRequest<PutSymbolRequest> request) throws Exception;

    @ApiOperation("getTrades")
    @PostMapping(value = "/getTrades", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getTrades(@RequestBody APIRequest<GetTradesRequest> request) throws Exception;

    @ApiOperation("getAccountSymbolCommissionHistory")
    @PostMapping(value = "/getAccountSymbolCommissionHistory", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAccountSymbolCommissionHistory(
            @RequestBody APIRequest<GetAccountSymbolCommissionHistoryRequest> request) throws Exception;

    @ApiOperation("putSymbolCommissionType")
    @PostMapping(value = "/putSymbolCommissionType", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putSymbolCommissionType(@RequestBody APIRequest<PutSymbolCommissionTypeRequest> request)
            throws Exception;

    @ApiOperation("getSymbolCommissionHistory")
    @PostMapping(value = "/getSymbolCommissionHistory", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getSymbolCommissionHistory(
            @RequestBody APIRequest<GetSymbolCommissionHistoryRequest> request) throws Exception;

    @ApiOperation("deleteNumOrdersFilter")
    @PostMapping(value = "/deleteNumOrdersFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteNumOrdersFilter(@RequestBody APIRequest<DeleteNumOrdersFilterRequest> request)
            throws Exception;

    @ApiOperation("postLotSizeFilter")
    @PostMapping(value = "/postLotSizeFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postLotSizeFilter(@RequestBody APIRequest<PostLotSizeFilterRequest> request)
            throws Exception;

    @ApiOperation("postPercentPriceFilter")
    @PostMapping(value = "/postPercentPriceFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postPercentPriceFilter(@RequestBody APIRequest<PostPercentPriceFilterRequest> request)
            throws Exception;

    @ApiOperation("deleteTPlusSellFilter")
    @PostMapping(value = "/deleteTPlusSellFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteTPlusSellFilter(@RequestBody APIRequest<DeleteTPlusSellFilterRequest> request)
            throws Exception;

    @ApiOperation("deletePercentPriceFilter")
    @PostMapping(value = "/deletePercentPriceFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deletePercentPriceFilter(@RequestBody APIRequest<DeletePercentPriceFilterRequest> request)
            throws Exception;

    @ApiOperation("postPositionFilter")
    @PostMapping(value = "/postPositionFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postPositionFilter(@RequestBody APIRequest<PostPositionFilterRequest> request)
            throws Exception;

    @ApiOperation("getSymbolCommission")
    @PostMapping(value = "/getSymbolCommission", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getSymbolCommission(@RequestBody APIRequest<GetSymbolCommissionRequest> request)
            throws Exception;

    @ApiOperation("postMinNotionalFilter")
    @PostMapping(value = "/postMinNotionalFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postMinNotionalFilter(@RequestBody APIRequest<PostMinNotionalFilterRequest> request)
            throws Exception;

    @ApiOperation("deleteNumIcebergOrders")
    @PostMapping(value = "/deleteNumIcebergOrders", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteNumIcebergOrders(@RequestBody APIRequest<DeleteNumIcebergOrdersRequest> request)
            throws Exception;

    @ApiOperation("putSymbolCommission")
    @PostMapping(value = "/putSymbolCommission", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putSymbolCommission(@RequestBody APIRequest<PutSymbolCommissionRequest> request)
            throws Exception;

    @ApiOperation("postNumOrdersFilter")
    @PostMapping(value = "/postNumOrdersFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postNumOrdersFilter(@RequestBody APIRequest<PostNumOrdersFilterRequest> request)
            throws Exception;

    @ApiOperation("deletePriceFilter")
    @PostMapping(value = "/deletePriceFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deletePriceFilter(@RequestBody APIRequest<DeletePriceFilterRequest> request)
            throws Exception;

    @ApiOperation("deleteMinNotionalFilter")
    @PostMapping(value = "/deleteMinNotionalFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteMinNotionalFilter(@RequestBody APIRequest<DeleteMinNotionalFilterRequest> request)
            throws Exception;

    @ApiOperation("postTPlusSellFilter")
    @PostMapping(value = "/postTPlusSellFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postTPlusSellFilter(@RequestBody APIRequest<PostTPlusSellFilterRequest> request)
            throws Exception;

    @ApiOperation("postIcebergPartsFilter")
    @PostMapping(value = "/postIcebergPartsFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postIcebergPartsFilter(@RequestBody APIRequest<PostIcebergPartsFilterRequest> request)
            throws Exception;

    @ApiOperation("deleteUserDataStream")
    @PostMapping(value = "/deleteUserDataStream", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteUserDataStream(@RequestBody APIRequest<DeleteUserDataStreamRequest> request)
            throws Exception;

    @ApiOperation("deletePositionFilter")
    @PostMapping(value = "/deletePositionFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deletePositionFilter(@RequestBody APIRequest<DeletePositionFilterRequest> request)
            throws Exception;

    @ApiOperation("deleteIcebergPartsFilter")
    @PostMapping(value = "/deleteIcebergPartsFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteIcebergPartsFilter(@RequestBody APIRequest<DeleteIcebergPartsFilterRequest> request)
            throws Exception;

    @ApiOperation("postNumAlgoOrdersFilter")
    @PostMapping(value = "/postNumAlgoOrdersFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postNumAlgoOrdersFilter(@RequestBody APIRequest<PostNumAlgoOrdersFilterRequest> request)
            throws Exception;

    @ApiOperation("postNumIcebergOrders")
    @PostMapping(value = "/postNumIcebergOrders", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postNumIcebergOrders(@RequestBody APIRequest<PostNumIcebergOrdersRequest> request)
            throws Exception;

    @ApiOperation("deleteMarketLotSizeFilter")
    @PostMapping(value = "/deleteMarketLotSizeFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteMarketLotSizeFilter(
            @RequestBody APIRequest<DeleteMarketLotSizeFilterRequest> request) throws Exception;

    @ApiOperation("postUserDataStream")
    @PostMapping(value = "/postUserDataStream", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postUserDataStream(@RequestBody APIRequest<PostUserDataStreamRequest> request)
            throws Exception;

    @ApiOperation("putUserDataStream")
    @PostMapping(value = "/putUserDataStream", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putUserDataStream(@RequestBody APIRequest<PutUserDataStreamRequest> request)
            throws Exception;

    @ApiOperation("deleteLotSizeFilter")
    @PostMapping(value = "/deleteLotSizeFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteLotSizeFilter(@RequestBody APIRequest<DeleteLotSizeFilterRequest> request)
            throws Exception;

    @ApiOperation("deleteNumAlgoOrdersFilter")
    @PostMapping(value = "/deleteNumAlgoOrdersFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteNumAlgoOrdersFilter(
            @RequestBody APIRequest<DeleteNumAlgoOrdersFilterRequest> request) throws Exception;

    @ApiOperation("postMarketLotSizeFilter")
    @PostMapping(value = "/postMarketLotSizeFilter", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> postMarketLotSizeFilter(@RequestBody APIRequest<PostMarketLotSizeFilterRequest> request)
            throws Exception;

    @ApiOperation("getOrderRateLimit")
    @PostMapping(value = "/getOrderRateLimit", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getOrderRateLimit(@RequestBody APIRequest<GetOrderRateLimitRequest> request)
            throws Exception;

    @ApiOperation("getAuctionReports")
    @PostMapping(value = "/getAuctionReports", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAuctionReports(@RequestBody APIRequest<GetAuctionReportsRequest> request)
            throws Exception;

    @ApiOperation("getAccountByExternalId")
    @PostMapping(value = "/getAccountByExternalId", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAccountByExternalId(@RequestBody APIRequest<GetAccountByExternalIdRequest> request)
            throws Exception;

    @ApiOperation("getAccountSymbolsCommission")
    @PostMapping(value = "/getAccountSymbolsCommission", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAccountSymbolsCommission(
            @RequestBody APIRequest<GetAccountSymbolsCommissionRequest> request) throws Exception;

    @ApiOperation("putOrderRateLimit")
    @PostMapping(value = "/putOrderRateLimit", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putOrderRateLimit(@RequestBody APIRequest<PutOrderRateLimitRequest> request)
            throws Exception;

    @ApiOperation("deleteOrderRateLimitAccount")
    @PostMapping(value = "/deleteOrderRateLimitAccount", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> deleteOrderRateLimitAccount(
            @RequestBody APIRequest<DeleteOrderRateLimitAccountRequest> request) throws Exception;

    @ApiOperation("putApiKeyPermissions")
    @PostMapping(value = "/putApiKeyPermissions", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putApiKeyPermissions(@RequestBody APIRequest<PutApiKeyPermissionsRequest> request)
            throws Exception;

    @ApiOperation("getEstimateSymbol")
    @PostMapping(value = "/getEstimateSymbol", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getEstimateSymbol(@RequestBody APIRequest<GetEstimateSymbolRequest> request)
            throws Exception;

    @ApiOperation("putAccountSymbolsCommission")
    @PostMapping(value = "/putAccountSymbolsCommission", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putAccountSymbolsCommission(
            @RequestBody APIRequest<PutAccountSymbolsCommissionRequest> request) throws Exception;

    @ApiOperation("getAccountTPlusLockState")
    @PostMapping(value = "/getAccountTPlusLockState", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getAccountTPlusLockState(
            @RequestBody APIRequest<GetAccountTPlusLockStateRequest> request) throws Exception;

    @ApiOperation("putOrderRateLimitAccount")
    @PostMapping(value = "/putOrderRateLimitAccount", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putOrderRateLimitAccount(@RequestBody APIRequest<PutOrderRateLimitAccountRequest> request)
            throws Exception;

    @ApiOperation("getPing")
    @PostMapping(value = "/getPing", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getPing(@RequestBody APIRequest<VoidBody> request) throws Exception;

    @ApiOperation("getCommands")
    @PostMapping(value = "/getCommands", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<String> getCommands(@RequestBody APIRequest<VoidBody> request) throws Exception;

    @ApiOperation("putExchangeGas")
    @PostMapping(value = "/putExchangeGas", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public APIResponse<Void> putExchangeGas(@RequestBody APIRequest<PutExchangeGasRequest> request) throws Exception;

}
